#include <iostream>
#include "global.h"
#include "constants.h"

using namespace std;

__type	power_matrix[__CAPACITY][__DIGITS];

//////////////////////////////////////////////////////
//////////////////////////////////////////////////////

__type
MyPower(__type x, __type y){
if(x==0 || y == 1)
	return x;
if(y == 0)
	return 1;

__type res=1;
#pragma unroll(4)
for(__type i=0;i<y;i++)
	res*=x;
return res;
}

///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////

int 
weight(__type nb){
	int res=0;
	while(nb>0)
		nb/=10,res++;
	return res;
}
///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////

void
usage(void){
cout<<"\n********************************************************************";
cout<<"\nUsage :\n\t$ smallbrain [ [ LB ] UB ]";
cout<<"\n\n\tUB: Upper Bound, default value = 1";
cout<<"\n\tLB: Lower Bound, default value = 0xffffffffffffffff = 2^64-1";
cout<<"\n\tBounds are unsigned integers, given in decimal or hexa format";
cout<<"\n********************************************************************"<<endl;
}


///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
void	
init_powers(){
#pragma prefetch power_matrix
for(int j=1; j<__CAPACITY;j++){
	#pragma ivdep
	for(int i=1;i<__DIGITS;i++)
		power_matrix[j][i]=MyPower(i,j);
	}
}
//////////////////////////////////////////////////////
//////////////////////////////////////////////////////
void
print_powers(){
for(int j=0; j<__CAPACITY;j++){
	cout<<endl<<j<<" : ";
	for(int i=0;i<__DIGITS;i++)
		cout<<" "<<power_matrix[j][i];
	}
}

